#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# cli handling
############################################################################
#    Copyright (C) 2007 by Håvard Gulldahl                                 #
#    havard@gulldahl.no                                                    #
#                                                                          #
#    This program is free software; you can redistribute it and#or modify  #
#    it under the terms of the GNU General Public License as published by  #
#    the Free Software Foundation; either version 2 of the License, or     #
#    (at your option) any later version.                                   #
#                                                                          #
#    This program is distributed in the hope that it will be useful,       #
#    but WITHOUT ANY WARRANTY; without even the implied warranty of        #
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         #
#    GNU General Public License for more details.                          #
#                                                                          #
#    You should have received a copy of the GNU General Public License     #
#    along with this program; if not, write to the                         #
#    Free Software Foundation, Inc.,                                       #
#    59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             #
############################################################################

import sys, logging
import storm.locals as storm
from storm import database
database.DEBUG = True
from jeje import ejeje_uri, ejeje_organisasjon, ejeje_postjournal, finn_organisasjon

def tastatur(tekst):
    return unicode(raw_input(tekst+': ').strip(), 'utf-8')

def oppdater_postjournal(obj, *args, **kwargs):
    logging.debug('oppdaterer postjournal: %s', obj)
    for a,v in kwargs.iteritems():
        if a == 'uri': obj.uri = v
        elif a == 'org': obj.org = v
        elif a == 'samling': obj.samling_uri = v
        elif a == 'bestill': obj.bestill_uri = v

    if not obj.uri: obj.uri = tastatur('Uri til postjournal')
    if not obj.enkeltjournal_uri: obj.enkeltjournal_uri = tastatur('Uri til en side av journalen')
    if obj.enkeltjournal_uri is not None: obj.implisitt_enkeltjournal = True
    if not obj.bestill_uri: obj.bestill_uri = tastatur('Uri til bestilling av dokumenter (epost)')
    if not obj.organisasjon:
        orgnavn = tastatur('Navn på tilhørende organisasjon')
        org = finn_organisasjon(orgnavn)
        if org is None:
            obj.organisasjon = ejeje_organisasjon()
            obj.organisasjon.navn = orgnavn

def synk_organisasjon_og_postjournal(store, alle=False):
    """Finn organisasjoner uten tilhørende postjournal, og oppdater_postjournal(ny pj)"""
    if alle:
        orgs = store.find(ejeje_organisasjon)
    else:
        from storm.expr import LeftJoin
        join = LeftJoin(ejeje_postjournal, ejeje_organisasjon.id == ejeje_postjournal.organisasjon_id)
        orgs = store.using(ejeje_organisasjon, join).find(ejeje_organisasjon, ejeje_postjournal.organisasjon_id == None) # order by random()? 
        #sql = """SELECT organisasjon.id, organisasjon.moder_id, organisasjon.navn, organisasjon.type, organisasjon.uri FROM organisasjon LEFT JOIN postjournal ON organisasjon.id = postjournal.organisasjon_id WHERE postjournal.organisasjon_id IS NULL ORDER BY RANDOM()"""
        #orgs = store.execute(sql)
        
    dirty = False
    for z in orgs[:10]:
        pj = ejeje_postjournal()
        pj.organisasjon = z
        s = "\nOppdaterer %s:" % z.navn
        try: s+= '( %s )' % z.uri
        except AttributeError: pass
        print s + '| http://www.google.no/search?hl=no&q=%s+kommune&btnI=Jeg+pr%%C3%%B8ver+lykken' % z.navn
        print "="*15
        try:
            oppdater_postjournal(pj)
        except KeyboardInterrupt:
            print
            break
        except EOFError:
            print
            del(pj)
            continue
        store.add(pj)
        dirty = True

    if dirty: store.commit()


if __name__ == '__main__':
    database = storm.create_database('sqlite:ejejeweb/ejeje.db')
    store = storm.Store(database)

    synk_organisasjon_og_postjournal(store)
